大家好,今天跟大家一起學習如何寫一個身分證產生器。
身份證字號規則說明如下:
確認一組身分證號碼是否合法??
1.目前的中華民國身分證字號一共有十碼,包括起首一個大寫的英文字母與接續的九個阿拉伯數字。
(1)英文代號以下表轉換成數字
A=10 台北市 J=18 新竹縣 S=26 高雄縣
B=11 台中市 K=19 苗栗縣 T=27 屏東縣
C=12 基隆市 L=20 台中縣 U=28 花蓮縣
D=13 台南市 M=21 南投縣 V=29 台東縣
E=14 高雄市 N=22 彰化縣 W=32 金門縣
F=15 台北縣 O=35 新竹市 X=30 澎湖縣
G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山
H=17 桃園縣 Q=24 嘉義縣 Z=33 連江縣
I=34 嘉義市 R=25 台南縣
(2),而首位數字則是拿來區分性別,男性為1、女性為2,
2.規則說明:
(1)英文轉成的數字, 個位數乘9再加上十位數
(2)各數字從右到左依次乘1、2、3、4....8
(3)求出(1),(2)之和
(4)求出(3)除10後之餘數,用10減該餘數,結果就是檢查碼,若餘數為0
檢查碼就是0
題外話:
身分證的「Y」所代表的正是臺北市內著名觀光景點─陽明山。而臺灣境內有這麼多座山,卻只有陽明山有如此特別地位,是因為民國三十八年國民政府初撤退來臺之初,陽明山便被作為蔣中正的臨時駐紮之處,也因為軍事等需求,政府在該年便將陽明山以及當時仍屬臺北縣士林鎮、北投鎮等區域,劃歸為特別設立的草山管理處(隔年改名為陽明山管理局)進行管理
本文開始:
Step 1. 寫一個Function
region 產生虛擬身分證
public string CreateVid(bool sex, int city)
{ //身分證開頭英文
/*
(1)英文代號以下表轉換成數字
A=10 台北市 city索引值(0) J=18 新竹縣 city索引值(9) S=26 高雄縣 city索引值
B=11 台中市 city索引值(1) K=19 苗栗縣 city索引值(10) T=27 屏東縣 city索引值(16)
C=12 基隆市 city索引值(2) L=20 台中縣 city索引值 U=28 花蓮縣 city索引值(17)
D=13 台南市 city索引值(3) M=21 南投縣 city索引值(11) V=29 台東縣 city索引值(18)
E=14 高雄市 city索引值(4) N=22 彰化縣 city索引值(12) W=32 金門縣 city索引值(19)
F=15 台北縣 city索引值(5) O=35 新竹市 city索引值(13) X=30 澎湖縣 city索引值(20)
G=16 宜蘭縣 city索引值(6) P=23 雲林縣 city索引值(14) Y=31 陽明山 city索引值
H=17 桃園縣 city索引值(7) Q=24 嘉義縣 city索引值(15) Z=33 連江縣 city索引值(21)
I=34 嘉義市 city索引值(8) R=25 台南縣 city索引值
*/
string[] county_E = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"M", "N", "O", "P", "Q", "T", "U", "V", "W", "X", "Z" };
//對應數字 (索引值)
int[] county_i = { 10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 21, 22, 35,
23, 24, 27, 28, 29, 32, 30, 33 };
Random r = new Random();
string id = county_E[city];
int c_i = county_i[city];
string s = "2";
if (sex) s = "1";
int rand_i = r.Next(0, 10000000);
//計算
int check = (c_i / 10) + 9 * (c_i - (c_i / 10) * 10) + Convert.ToInt32(s) * 8;
for (int i = 7; i >= 1; i--)
{
check += ((rand_i / (int)Math.Pow(10, i - 1)) % 10) % 10 * i;
}
check = (10 - (check % 10)) % 10;
//計算審核碼
id += s + rand_i.ToString().PadLeft(7, '0') + check.ToString();
return id;
}
#endregion
Step 2 創建一個View,使用建立的function
public ActionResult Demo() {
//CreateVid(true:男,false:女, 縣市索引值)
ViewBag.ID = CreateVid(false, 21); //連江縣 Z
return View();
}
Step 3. 成功畫面
參考資料: